﻿//+-------------------------------------------------------------------------------------------------------------------------------------------------------
//
//Description: ExternalPayloadViewModel
//Author: Aravind Ramarathinam (aravr@microsoft.com)
//Copyright © Microsoft Corporation
//Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 
//You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
//
//THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, 
//INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. 
//See the Apache Version 2.0 License for specific language governing permissions and limitations under the License.
// 
//--------------------------------------------------------------------------------------------------------------------------------------------------------

using System.ComponentModel;
using VmroleAuthor.Models;

namespace VmroleAuthor.ViewModels
{
    public class ExternalPayloadViewModel : ViewModelBase, IDataErrorInfo, ICleanupParamsAndPayload
    {
        private readonly ExternalPayload externalPayload;

        /// <summary>
        /// Constructor
        /// </summary>
        public ExternalPayloadViewModel(ExternalPayload externalPayload)
        {
            this.externalPayload = externalPayload;
        }

        public ExternalPayload ExternalPayload
        {
            get { return this.externalPayload; }
        }

        public static class PropertyNames
        {
            public const string RelativePath = "RelativePath";
            public const string Hash = "Hash";
            public const string URLHint = "URLHint";
        }

        public string RelativePath
        {
            get { return this.externalPayload.RelativePath; }
            set
            {
                if (!string.IsNullOrEmpty(value))
                {
                    this.externalPayload.RelativePath = value;                  
                }               
                this.OnPropertyChanged(PropertyNames.RelativePath);
            }
        }

        public string Hash
        {
            get { return this.externalPayload.Hash; }
            set
            {
                this.externalPayload.Hash = value; 
                this.OnPropertyChanged(PropertyNames.Hash);
            }
        }

        public string URLHint
        {
            get { return this.externalPayload.URLHint; }
            set { this.externalPayload.URLHint = value; this.OnPropertyChanged(PropertyNames.URLHint); }
        }

        public string this[string propertyName]
        {
            get
            {
                string error;
                switch (propertyName)
                {
                    case PropertyNames.RelativePath:
                        if (string.IsNullOrEmpty(this.RelativePath))
                        {
                            error = "Cannot be empty";
                            return error;
                        }                    
                        break;
                    case PropertyNames.URLHint:                                                         
                        break;
                    case PropertyNames.Hash:
                        if (string.IsNullOrEmpty(this.Hash))
                        {
                            error = "Cannot be empty";
                            return error;
                        }
                        break;
                }
                return null;
            }
        }

        public string Error { get; set; }
        public void Cleanup()
        {
        }
    }   
}
